﻿// NodesColl.cpp : 实现文件
//

#include "stdafx.h"
#include "GHCY.h"
#include "Ground.h"
#include "../Hui/Hui.h"
#include "Car.h"
#include "GException.h"
#include "LogList.h"
#include "NodeColl.h"
#include "NodesColl.h"

// NodesColl

#ifdef _DEBUG
	#define new DEBUG_NEW
#endif

/// <作者>Mr. Hu</作者>
/// <日期>20220705</日期>
/// <功能>卡号集合</功能>
/// <参数 name = ""></参数>
/// <返回></返回>
/// <说明>同一卡号对应的节点</说明>
NodesColl::NodesColl()
{
}

NodesColl::~NodesColl()
{
	for (size_t i = 0, length = getSize(); i < length; i++)
	{
		delete m_pArrCards[i];
	}
}

/// <作者>Mr. Hu</作者>
/// <日期>20220705</日期>
/// <功能>初始化卡号表</功能>
/// <参数 name = ""></参数>
/// <返回></返回>
/// <说明></说明>
void NodesColl::init()
{
	ASSERT(afxpArrRoads);
	int nMaxCard = theApp.m_pGround->m_nMaxCard;
	m_pArrCards.SetSize((size_t)nMaxCard + 1);	// 多加一项，0无效
	for (size_t i = 0; i <= nMaxCard; i++)
	{
		m_pArrCards[i] = 0;
	}

	ASSERT(theApp.m_pGround);
	CArray<RoadNode, RoadNode&>& arrRoadNodes = theApp.m_pGround->m_arrRoadNodes;
	size_t length = arrRoadNodes.GetCount();
	for (size_t i = 0; i < length; i++)
	{
		RoadNode* prn = &arrRoadNodes[i];
		add(prn);
	}
}

/// <作者>Mr. Hu</作者>
/// <日期>20220705</日期>
/// <功能>添加一个卡号对应的节点</功能>
/// <参数 name = "prn">指向道路节点</参数>
/// <返回></返回>
/// <说明></说明>
void NodesColl::add(RoadNode* prn)
{
	// 卡号
	int nCard = prn->m_nCard;
	// ?? rn.m_nCard <= 0 时没有卡号，不加，以后都加上
	if (nCard <= 0)
		return;

	ASSERT(nCard < getSize());

	// 如果卡号不存在
	if (!m_pArrCards[nCard])
	{
		// 新建卡号
		NodeColl* pNode = new NodeColl(prn);
		m_pArrCards[nCard] = pNode;
	}
	else
	{
		// 否则在已有卡号中添加点
		m_pArrCards[nCard]->addNode(prn);
	}
}

/// <作者>Mr. Hu</作者>
/// <日期>20220705</日期>
/// <功能>取端点数量</功能>
/// <参数 name = ""></参数>
/// <返回>端点总数</返回>
/// <说明></说明>
INT_PTR NodesColl::getSize()
{
	return m_pArrCards.GetCount();
}
